Read Buf

Read Buf

NVIDIA 全面转向开源 GPU 内核模块

在 R515 驱动程序中,NVIDIA 于 2022 年 5 月开源了一套 Linux GPU 内核模块,采用 GPL 和 MIT 双重许可协议。最初,该版本主要针对数据中心计算 GPU,而 GeForce 和工作站 GPU 仅处于 alpha 测试阶段。

当时,我们宣布,更强大和功能齐全的 GeForce 和工作站 GPU 的 Linux 支持将在后续版本中发布,NVIDIA 开源内核模块最终将取代闭源驱动程序。

NVIDIA 的 GPU 共享一个通用的驱动程序架构和功能集合。同一个驱动程序既可以在桌面或笔记本电脑上运行,也可以在云端运行最先进的 AI 工作负载。对我们来说,这一点至关重要。

两年后,我们通过开源 GPU 内核模块实现了等同或更好的应用性能,并增加了许多新功能:

  • 异构内存管理 (HMM) 支持
  • 安全计算
  • 我们 Grace 平台的一致性内存架构
  • 以及更多

我们现在已经准备好完全转向开源 GPU 内核模块,并将在即将发布的 R560 驱动程序中做出这一改变。

支持的 GPU

并非所有 GPU 都兼容开源 GPU 内核模块。

对于 NVIDIA Grace Hopper 或 NVIDIA Blackwell 这样最前沿的平台,必须使用开源 GPU 内核模块。这些平台不支持专有驱动程序。

对于较新的 Turing、Ampere、Ada Lovelace 或 Hopper 架构的 GPU,NVIDIA 建议切换到开源 GPU 内核模块。

对于较旧的 Maxwell、Pascal 或 Volta 架构的 GPU,开源 GPU 内核模块与您的平台不兼容,请继续使用 NVIDIA 专有驱动程序。

对于同一系统中同时使用较旧和较新 GPU 的混合部署,请继续使用专有驱动程序。

如果您不确定,NVIDIA 提供了一个新的检测助手脚本,帮助您选择合适的驱动程序。有关更多信息,请参见本文后面的“使用安装助手脚本”部分。

安装程序的变化

总体来说,通过所有安装方法安装的驱动程序默认版本将从专有驱动程序切换到开源驱动程序。有一些特定场景需要特别注意:

  • 包含 CUDA 元包的包管理器
  • 运行文件
  • 安装助手脚本
  • 包管理器详细信息
  • 适用于 Linux 的 Windows 子系统
  • CUDA 工具包

使用包管理器安装 CUDA 元包

当你使用包管理器(而不是 .run 文件)安装 CUDA 工具包时,可以使用安装元包。通过安装顶级的 cuda 包,你将同时安装 CUDA 工具包和相关的驱动程序。例如,在 CUDA 12.5 发行期间安装 cuda,你会得到 NVIDIA 专有驱动程序 555 以及 CUDA 工具包 12.5。

图 1 显示了这种包的结构。

pic

过去,如果你使用开源的 GPU 内核模块,则可以使用顶级元包。你需要安装特定发行版的 NVIDIA 驱动程序 open 包以及你选择的 cuda-toolkit-X-Y 包。

从 CUDA 12.6 版本开始,这个流程发生了变化(图 2)。

pic

使用 .run 文件

如果你使用 .run 文件安装 CUDA 或 NVIDIA 驱动程序,安装程序会自动检测你的硬件并安装最合适的驱动程序。你还可以通过用户界面选择使用专有驱动程序或开源驱动程序。

如果你通过 CUDA 的 .run 文件安装并使用 ncurses 用户界面,你会看到类似如下的菜单:

┌──────────────────────────────────────────────────────────────────────────────┐
│ CUDA Driver                                                                  │
[ ] Do not install any of the OpenGL-related driver files                  │
[ ] Do not install the nvidia-drm kernel module                            │
[ ] Update the system X config file to use the NVIDIA X driver             │
│ - [X] Override kernel module type[X] proprietary                                                         │
[ ] open                                                                │
│   Change directory containing the kernel source files                        │
│   Change kernel object output directory                                      │
│   Done                                                                       │
│                                                                              │
│                                                                              │
│                                                                              │
│ Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options │
└──────────────────────────────────────────────────────────────────────────────┘

如果你通过驱动程序的 .run 文件安装,也会看到类似的选择(图 3)。

pic

你也可以通过命令行传递参数来跳过用户界面进行安装,或使用如 Ansible 等自动化工具。

# sh ./cuda_12.6.0_560.22_linux.run --override --kernel-module-type=proprietary
# sh ./NVIDIA-Linux-x86_64-560.run --kernel-module-type=proprietary

使用安装助手脚本

如果您不确定系统中的 GPU 应该选择哪个驱动程序,可以使用 NVIDIA 提供的助手脚本来帮助您进行选择。

首先,使用包管理器安装 nvidia-driver-assistant 包,然后运行以下命令:

$ nvidia-driver-assistant

包管理器详情

为了确保一致的安装体验,NVIDIA 建议您使用包管理器来安装 CUDA Toolkit 和驱动程序。不过,不同的 Linux 发行版使用的包管理系统和包结构可能会有所不同。

本节详细介绍了不同平台的具体操作步骤、注意事项迁移步骤。

apt: 适用于 Ubuntu 和 Debian 系发行版

运行以下命令:

$ sudo apt-get install nvidia-open

在 Ubuntu 20.04 上,如果要使用 CUDA 元包进行升级,首先需要切换到开放内核模块:

$ sudo apt-get install -V nvidia-kernel-source-open

$ sudo apt-get install nvidia-open

dnf: Red Hat Enterprise Linux,Fedora,Kylin,Amazon Linux,或 Rocky Linux

运行以下命令:

$ sudo dnf module install nvidia-driver:open-dkms

在基于 dnf 的发行版上使用 cuda metapackage 进行升级时,需要禁用模块流:

$ echo "module_hotfixes=1" | tee -a /etc/yum.repos.d/cuda*.repo
$ sudo dnf install --allowerasing nvidia-open
$ sudo dnf module reset nvidia-driver

zypper: SUSE Linux Enterprise Server 或 OpenSUSE

运行以下命令之一:

# 默认内核版本
$ sudo zypper install nvidia-open
# azure 内核版本 (sles15/x86_64)
$ sudo zypper install nvidia-open-azure
# 64kb 内核版本 (sles15/sbsa),需要用于 Grace-Hopper
$ sudo zypper install nvidia-open-64k

包管理器摘要

为了简化,我们将包管理器的建议总结在表格中。所有驱动版本 560 及 CUDA Toolkit 12.6 之后的版本都将采用这些打包规范。

Distro Install the latest Install a specific release
Fedora/RHEL/Kylin dnf module install nvidia-driver:open-dkms dnf module install nvidia-driver:560-open
openSUSE/SLES zypper install nvidia-open{-azure, -64k} zypper install nvidia-open-560{-azure, -64k}
Debian apt-get install nvidia-open apt-get install nvidia-open-560
Ubuntu apt-get install nvidia-open apt-get install nvidia-open-560

更多信息请参见 NVIDIA Datacenter Drivers。

Windows Subsystem for Linux

Windows Subsystem for Linux (WSL) 使用来自主机 Windows 操作系统的 NVIDIA 内核驱动程序。您无需为此平台安装任何驱动程序。如果您使用 WSL,无需进行任何更改或操作。

CUDA Toolkit

通过包管理器安装 CUDA Toolkit 的方法没有变化。运行以下命令:

$ sudo apt-get/dnf/zypper install cuda-toolkit